#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Base.py: Importa as bibliotecas comuns e define variáveis para todos os cálculos."""

__author__      = "Lauro C. de Sá"
__copyright__   = "Copyright 2013, Planet Earth"
__credits__ = ["",]
__license__ = "GPL"
__version__ = "1.0.1"
__maintainer__ = "Lauro C. de Sá"
__email__ = "lauro@ecdesa.com"
__status__ = "Produção"

.

# +++++++++++++++++++++++++++++++++
# Bibliotecas
# +++++++++++++++++++++++++++++++++
# 1. Alguns detalhes
#
#    O código abaixo desliga a divisão padrão para números inteiros. Desta forma, ao dividir números inteiros, o resultado poderá ser real também. Divisão de números inteiros é um erro comum.
#
# ::

from __future__ import division

# #. math
#
#    Biblioteca com as funções matemáticas comumente utilizadas na engenharia como, por exemplo, seno, cosseno, tangente, etc.
#
# ::

from math import *

# #. NumPy
#
#    Biblioteca para manipulação de arrays multidimensionais e matrizes. Ideal para álgebra linear.
#
# ::

import numpy as np

# #. SymPy
#
#    Biblioteca para manipulação de equações simbólicas.
#    
#    Altere a configuração "mp.pretty" para que a impressão não saia com o tipo "mpf(...)".
#
# ::

import sympy as syp

#syp.mpmath.mp.pretty = True

# #. Unum
#
#    Ótima biblioteca para trabalhar com dimensões em Python.
#    Acesse: http://home.scarlet.be/be052320/Unum.html, ou http://home.scarlet.be/be052320/docs.html para visualizar a documentação.
#
#    Para importar as unidades e trabalhar com elas no script, execute o código abaixo:
#
# ::

from unum import Unum
from unum.units import *

# ------------------
# Unidades
# ------------------
# A fim de facilitar o desenvolvimento de cálculos nesta seção, seguem abaixo algumas definições:
#
# ::

grav = Unum.unit('grav',10*m/s**2,'gravity')
gravV = grav * np.array([0,0,-1])
kN = Unum.unit('kN',1000*N,'kilo Newton')
MPa = Unum.unit('MPa',10**6*Pa,'mega Pascal')


def main():
    pass


class base():
    def __init__(self):
        self.log = ""
        self._alterado = True

    def set_alterado(self, value):
        if value is bool:
            self._alterado = value

    def get_alterado(self):
        return self._alterado

    alterado = property(fget=get_alterado, fset=set_alterado, doc="controle de alteração do objeto")

    def calcular(self):
        # Nas subclasses, chamar este método a implementação do mesmo nela.
        self.alterado = False

if __name__ == '__main__':
    import doctest
    doctest.testmod()
    main()

